<script>
/* 
1.函数作为参数：
    无时间差:操作函数   sort 直接得到结果
    有时间差:回调函数   后台交互，等待服务器返回结果，将服务器返回的结果作为你定义函数的参数，在服务器返回结果之后进行运行，需要等待的函数叫回调函数，异步操作
使用函数时考虑：
    函数本身作为参数 传入函数的名称即可
    函数的返回值作为参数   传入时加括号先运行

2.函数作为另外一个函数的返回值
    当一个函数的返回值还是一个函数，赋值的结果是函数，再进行运行

创建一个可以生成排序规则的函数的函数
    闭包：
        函数运行时：新建一个作用域   函数声明    函数执行
    优点：
        函数外面不可见，
        应用：随机生成不重复的字符串
    缺陷：占用内存
    闭包的原理：
    作用域:是一套查找规则 预处理阶段 
    作用域链:
    执行环境:
    活动对象:

 */


var arr = [1,2,4,9,7,3,0];
arr.sort((a,b)=>b-a);
console.log(arr);

(function(){
    console.log(arr);
})();

function start(){
    console.log("开始时间");
}
function end(){
    console.log("结束时间");
}
function execute(a){
    console.log("正在执行");
    a();
}

function a(){
    var i =0;
    return function(){console.log(i++)}
}
var b = a();
b();//0
b();//1
b();//2
// 全局作用域生成
var getId=(function(){
    var x = 'abc';
    var y = 0;
    return function(){return x+y++} 
})()
// 垃圾回收 getId=null

console.log(getId());
console.log(getId());
console.log(getId());
</script>